There are many different methods for producing software. Programmers design and program software manually in some type of programming language such as C, C++, Java, C# (C-Sharp), and by using a software design tool such as those available from the Rational Software Corporation. There are problems with traditional methods of software design, in that the quality of code produced by traditional methods generates flawed software components because of human error. Further, when these components are modified, the software design needs to be retested, as there are typically relationships between components that have been modified and other components that access them. Also, individuals may develop certain code components that cannot be reused in later projects.
Object-oriented software is typically produced by programmers who have predetermined ideas regarding how a software system should be designed. These programmers determine, in an ad-hoc manner, the structure of classes (or class hierarchy), and this structure may not be optimal. Current software tools and design methods, such as those available from the Rational Software Corporation and modeling standards such as the Unified Modeling Language (UML), allow programmers to diagram object hierarchies and show interactions between objects. These tools and methods are more fully described in the book entitled “The Unified Software Development Process” by I. Jacobson, et al., Addison-Wesley, Upper Saddle River, N.J. (1999), incorporated by reference herein in its entirety. However, these tools are merely diagramming tools, requiring analysts to manually determine object structure features. That is, these tools only produce software architecture designs as good as the information input to the tools by programmers.
Additionally, as demand for software applications suited for a very particular task increases, the need to develop software rapidly and inexpensively becomes very important. Conventional programming methods are ad hoc methods that require the developer to modify previously written code based on changes or errors in subsequent code. Modifying previously written code adds to the time of a project and consequently increases costs.
Also, the design and production of quality software is a typically a long-term process involving design, coding and testing periods. Because software production cycles must decrease to meet shorter design schedules, it would be beneficial to have a software system and method that produces code in an error-free, efficient, and expedient manner. Also, it would be beneficial to be able to reuse software code between projects. In summary, existing methods for producing software are non-optimal, resulting in increased cost of development, high maintenance costs, limited reusability, extensive debugging and testing, and poor documentation.